package com.zimmur.dao.goods;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.zimmur.model.goods.Goods;
import com.zimmur.model.goods.GoodsParameter;
import com.zimmur.model.zone.RecommendHomeGoods;
import com.zimmur.tools.PageUtil;

/**
 * 产品尺码/面料数据Dao
 * @author Administrator
 *
 */
public interface IGoodsDao {
	/**
	 * 商品查询
	 * @param goodsType
	 * @return
	 */
	List<Goods> selectGoodsListByQuery(GoodsParameter goodsParameter);
	/**
	 * 商品查询 记录数
	 * @param goodsType
	 * @return
	 */
	int selectGoodsListByQueryCount(GoodsParameter goodsParameter);
	/**
	 * 获取单个商品信息
	 * @param productId
	 * @return
	 */
    Goods selectByPrimaryKey(long goodsId);
    /**
     * 获取多个商品简单信息
     * @param productIds
     * @return
     */
    List<Goods> selectListByGoodsIds(Map<String,Object> map);
    /**
     * 获取用户收藏商品列表
     * @param userId 当前用户ID
     * @param goodsIds 商品ID
     * @return 按收藏时间降序排列
     */
    List<Goods> selectByUserIdGoodsCollectList(@Param("userId")long userId,
    		@Param("pageBeginNo")int beginIndex,@Param("pageSize")int pageSize);
    /**
     * 获取多个商品信息
     * @param goodsIds 商品ID,以逗号分隔
     * @param typeFlag 分类类别 1衣匠/2家定
     * @return
     */
    List<Goods> selectByGoodsIdsAndTypeFlag(Map<String,Object> map);
    /**
     * 根据多个类别ID获取多个商品简单信息
     * @param productIds
     * @return
     */
    List<Goods> selectListByTypeIds(GoodsParameter goodsParameter);
    /**
     * 根据多个类别ID获取商品记录数
     * @param typeIds
     * @return
     */
   	int selectListByTypeIdsCount(GoodsParameter goodsParameter);
    /**
     * 获取推荐商品简单信息
     * @param topNum 推荐个数
     * @return
     */
    List<Goods> selectListByRecommand(int topNum);
    /**
     * 根据类型 获取多个商品简单信息
     * @param productIds
     * @return
     */
    List<Goods> selectListBytypeFlag(GoodsParameter goodsParameter);
    /**
     * 根据类型 获取多个商品记录数
     * @param productIds
     * @return
     */
    int selectListBytypeFlagCount(GoodsParameter goodsParameter);
    /**
     * 分享,修改转发数
     * @return
     */
    int updateGoodsShareNum(Goods goods);
    /**
     * 根据用户 获取多个商品简单信息
     * @param productIds
     * @return
     */
    List<Goods> selectListByUserId(GoodsParameter goodsParameter);
    //    List<Goods> selectListByUserId(@Param(value="pageSize")long pageSize,@Param(value="pageNow")long pageNow,@Param(value="userId")long userId);
    /**
     * 根据用户 获取 最新发布的 多个商品简单信息
     * @param userId 用户ID
     * @param pageNows 当前页码
     * @param PageSize 每页总数
     * @return
     */
     List<Goods> selectByUserIdRecentList(GoodsParameter GoodsParameter);
     /**
      * 分页获取推荐商品
      * @param GoodsParameter
      * @return
      */
     List<Goods> selectListByRecommandPage(GoodsParameter GoodsParameter);
//    List<Goods> selectByUserIdRecentList(PageUtil<Goods> page);
//    List<Goods> selectByUserIdRecentList(@Param(value="pageSize")long pageSize,@Param(value="pageNow")long pageNow,@Param(value="userId")long userId);
    /**
     * 获取单个商品详情并且显示用户是否收藏
     * @param userId
     * @param goodsId
     * @return
     */
    Goods selectByGoodsIdAndIsCollect(@Param(value="userId")long userId,@Param(value="goodsId")long goodsId);
    /**
     * 统计设计师的商品
     * @return
     */
    int selectUserIdCountGoods(long userId);
    /**
     * 统计设计师近30天的最新商品
     * @return
     */
    int selectUserIdInterval30CountGoods(long userId);
    /**
     * 统计衣匠所有商品
     * @return
     */
    int selectCountAllGoodsDesiger();
    /**
     * 根据条件查询出总数量
     * @param goodsParameter
     * @return
     */
    int selectByQueryCount(GoodsParameter goodsParameter);
    /**
     * 根据分类类别分类ID（代表分类1层）查询出其商品
     * @param goodsParameter
     * @return
     */
    List<Goods> selectBytypeFlagAndTypeIdList(GoodsParameter goodsParameter);
    /**
     * 根据分类类别分类ID（代表分类1层）查询出记录数
     * @param goodsParameter
     * @return
     */
    int selectBytypeFlagAndTypeIdListCount(GoodsParameter goodsParameter);
    /**
     * 根据商品ID更新浏览次数
     * @param goods
     * @return
     */
    int updateGoodsBrowersNum(Goods goods);
    /**
     * 根据商品ID更新库存数/销售数/订单数信息
     * @param goods
     * @return
     */
    int updateGoodsInventoryNumAndSaleNumAndOrdersNum(Goods goods);
    /**
     * 获取设计师社群推荐商品数
     * @param goodsParameter
     * @return
     */
    int selectListBytypeFlagAndUserIdCount(GoodsParameter goodsParameter);
    /**
     * 获取设计师社群推荐分页商品
     * @param goodsParameter
     * @return
     */
    List<Goods> selectListBytypeFlagAndUserId(GoodsParameter goodsParameter);
    /**
     * 查询商品
     * 通过条件 typeIds,typeFlag,orderByClause,title 查询商品
     * @param goodsParameter
     * @return
     */
    List<Goods> selectGoodsByParam(GoodsParameter goodsParameter);
    /**
     * 统计商品
     * 通过条件 typeIds,typeFlag,orderByClause,title 查询商品
     * @param goodsParameter
     * @return
     */
   	int countGoodsByParam(GoodsParameter goodsParameter);
   	/**
   	 * 单一商品
   	 * 查询商品信息 根据solr所需数据 封装对象
   	 * @param goodsId
   	 * @return
   	 */
   	com.zimmur.solr.model.Goods selectGoodsByGoodsIdForSolr(Long goodsId);
   	/**
   	 * 多件商品
   	 * 查询商品信息 根据solr所需数据 封装对象
   	 * @param goodsIds
   	 * @return
   	 */
   	List<com.zimmur.solr.model.Goods> selectGoodsByGoodsIdsForSolr(@Param("goodsIds")String goodsIds);
	/**
	* <p>Title: selectRecHomeGoods</p>
	* <p>Description: 查询推荐商品以及图片信息</p>
	* @return
	*/
	List<RecommendHomeGoods> selectRecHomeGoods();
}